﻿/* * * * * * * * * * * * * * * *
 * SDL ToolBox                 *
 * Copyright (c) VosSoft 2009  *
 * * * * * * * * * * * * * * * *
 * file:    class toolbox      *
 * date:    2009-05-06         *
 * * * * * * * * * * * * * * * */

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace SDL_ToolBox
{
    class ToolBox
    {
        /// <summary>
        /// Liefert einen Ausschnitt aus einem Bild
        /// </summary>
        /// <param name="image">Referenz auf das Bild</param>
        /// <param name="x">X-Position des Ausschnitts</param>
        /// <param name="y">Y-Position des Ausschnitts</param>
        /// <param name="width">Breite des Ausschnitts</param>
        /// <param name="height">Höhe des Ausschnitts</param>
        /// <returns>Gibt eine Referenz auf ein neues Bitmap zurück, 
        /// das den Ausschnitt aus dem Originalbild enthält</returns>
        public static Bitmap CropImage(Image image, int x, int y, int width, int height)
        {
            // neues Bitmap-Objekt mit den gegebenen Ausmaßen und dafür ein
            // Graphics-Objekt erzeugen
            Bitmap bmp = new Bitmap(width, height);
            Graphics graph = Graphics.FromImage(bmp);

            // die Zeichenqualität einstellen (hohe Qualität)
            graph.InterpolationMode = InterpolationMode.HighQualityBicubic;
            graph.PixelOffsetMode = PixelOffsetMode.HighQuality;
            graph.SmoothingMode = SmoothingMode.HighQuality;

            // den Ausschnitt des Quellbilds auf das Ziel-Bild kopieren
            Rectangle destRect = new Rectangle(0, 0, width, height);
            graph.DrawImage(image, destRect, x, y, width, height, GraphicsUnit.Pixel);
            graph.Dispose();

            // Ergebnis zurückgeben
            return bmp;
        }

        /// <summary>
        /// Wandelt binäre Nullen in Leerzeichen um
        /// </summary>
        /// <param name="chr">Char-Array</param>
        public static void zeroToSpace(char[] chr)
        {
            for (int i = chr.Length - 1; i >= 0; i--)
            {
                if (chr[i] == '\0')
                    chr[i] = ' ';
                else
                    break;
            }
        }

        /// <summary>
        /// Wandelt Leerzeichen in binäre Nullen um
        /// </summary>
        /// <param name="chr">Char-Array</param>
        public static void spaceToZero(char[] chr)
        {
            for (int i = chr.Length - 1; i >= 0; i--)
            {
                if (chr[i] == ' ')
                    chr[i] = '\0';
                else
                    break;
            }
        }

        /// <summary>
        /// Ermittelt den WindowState anhand eines Strings
        /// </summary>
        /// <param name="str">WindowState-String</param>
        /// <returns>FormWindowState</returns>
        public static FormWindowState getWindowState(string str)
        {
            if (str == "Maximized")
                return FormWindowState.Maximized;
            else
                return FormWindowState.Normal;
        }

        /// <summary>
        /// Ermittelt den DashStyle anhand eines Strings
        /// </summary>
        /// <param name="str">DashStyle-String</param>
        /// <returns>DashStyle</returns>
        public static DashStyle getDashStyle(string str)
        {
            switch (str)
            {
                case "Gestrichelt":
                    return DashStyle.Dash;
                case "Gepunktet":
                    return DashStyle.Dot;
                case "Strich-Punkt":
                    return DashStyle.DashDot;
                case "Strich-Punkt-Punkt":
                    return DashStyle.DashDotDot;
                default:
                    return DashStyle.Solid;
            }
        }
    }
}
